package com.qianxun.module.application.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qianxun.module.application.entity.ApplicationDataRelation;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 应用数据关联mapper
 *
 * @author Admin
 */
public interface ApplicationDataRelationMapper {

    /**
     * 创建表
     *
     * @param tableName 表名称
     * @return
     */
    int createTable(@Param("tableName") String tableName);

    /**
     * 查询指定数量
     *
     * @param tableName 表名
     * @param appId     应用id
     * @param dataType  数据类型
     * @return
     */
    int queryCount(@Param("tableName") String tableName, @Param("appId") String appId, @Param("dataType") String dataType);

    /**
     * 插入数据
     *
     * @param tableName   表名
     * @param appId       应用ID
     * @param dataType    数据类型
     * @param dataKey     数据key
     * @param createdTime 创建时间
     * @param sort1       排序值
     * @param sort2       排序值
     * @param sort3       排序值
     * @param sort4       排序值
     * @param sort5       排序值
     * @return
     */
    int insertIntoTable(@Param("tableName") String tableName, @Param("appId") String appId,
                        @Param("dataType") String dataType, @Param("dataKey") String dataKey, @Param("createdTime") Date createdTime,
                        @Param("sort1") String sort1, @Param("sort2") String sort2, @Param("sort3") String sort3,
                        @Param("sort4") String sort4, @Param("sort5") String sort5
    );

    /**
     * 删除指定的数据
     *
     * @param tableName 表名
     * @param appId     应用id
     * @param dataType  数据类型
     * @return
     */
    int deleteData(@Param("tableName") String tableName, @Param("appId") String appId, @Param("dataType") String dataType);

    /**
     * 复制a表数据到b表
     *
     * @param targetTableName 目标表
     * @param originTableName 原表
     * @param appId           应用ID
     * @param dataType        数据类型
     * @return
     */
    int copyData(@Param("targetTableName") String targetTableName, @Param("originTableName") String originTableName,
                 @Param("appId") String appId, @Param("dataType") String dataType);


    /**
     * 分页查询数据信息
     *
     * @param tables   查询的分表集合
     * @param appId    应用ID
     * @param dataType 数据类型
     * @param dataKey  数据key
     * @param page     分页信息
     * @param sortList 排序信息
     * @return
     */
    List<ApplicationDataRelation> selectByPage(@Param("tables") List<String> tables, @Param("appId") String appId,
                                               @Param("dataType") String dataType, @Param("dataKey") String dataKey,
                                               @Param("sortList") Set<Map<String, String>> sortList,
                                               Page<ApplicationDataRelation> page);


}
